package com.allwees.bs.c.module.user.service;

import com.alibaba.fastjson.JSONObject;
import com.allwees.bs.c.module.user.dto.CheckResult;
import com.allwees.bs.c.module.user.dto.UserDto;
import com.allwees.bs.c.module.user.entity.UserEntity;
import com.allwees.bs.c.module.user.req.ChangeEmailReq;
import com.allwees.bs.c.module.user.req.ChangePasswordReq;
import com.allwees.bs.c.module.user.req.RegisterReq;
import com.allwees.bs.c.module.user.req.ResetPasswordReq;
import com.allwees.bs.c.module.user.req.SendVerifyEmailReq;
import com.allwees.bs.c.module.user.req.ThirdPartLoginReq;
import com.allwees.bs.c.module.user.req.UserProfileReq;
import com.allwees.bs.c.module.user.vo.UserProfileVO;


public interface IUserService {

    /**
     * 更新用户信息
     *
     * @param user
     */
    void update(UserEntity user);

    /**
     * 注册
     *
     * @param registerReq
     * @return
     */
    UserDto register(RegisterReq registerReq);

    /**
     * @param req
     * @return
     */
    UserDto visitorRegister(RegisterReq req);

    /**
     * 查找user
     *
     * @param userUuid
     * @return
     */
    UserEntity findByUserUuid(String userUuid);

    /**
     * 密码是否存在
     *
     * @param email
     * @return
     */
    boolean emailExists(String email);

    /**
     * 用户信息
     *
     * @param userUuid
     * @return
     */
    UserDto userInfo(String userUuid);

    /**
     * 忘记密码
     *
     * @param email
     */
    void forgetPassword(String email);

    /**
     * 重置密码
     *
     * @param rpVo
     */
    void resetPassword(ResetPasswordReq rpVo);

    /**
     * 修改密码
     *
     * @param req
     */
    void changePassword(String userUuid, ChangePasswordReq req);

    /**
     * 上传用户头像
     *
     * @param userUuid
     * @param avatar
     */
    void uploadAvatar(String userUuid, String avatar);

    /**
     * 更新用户信息
     *
     * @param userProfileReq
     */
    void updateProfile(String userUuid, UserProfileReq userProfileReq);

    /**
     * 获取用户信息
     *
     * @param userUuid
     */
    UserProfileVO findProfileByUuid(String userUuid);


//    JSONObject getToken(String username, String password, String pushId);

    ///////////////通过第三方token登录///////////////
    //1.先检查用户是否存在，不存在则插入数据库；
    CheckResult checkUser(ThirdPartLoginReq req);
    //2.生成token，分开的原因是要在两个独立的事务中，否则此步发送的post请求查不到第一步插入的数据；
//    JSONObject generateToken(ThirdPartLoginReq req, CheckResult checkResult);
    ///////////////通过第三方token登录///////////////

    /**
     * 修改 email
     *
     * @param userUuid
     * @param req
     */
    void changeEmail(String userUuid, ChangeEmailReq req);

    /**
     * 发送邮件
     *
     * @param userUuid
     * @param req
     */
    void sendVerifyEmail(String userUuid, SendVerifyEmailReq req);

    /**
     * 是否默认密码
     *
     * @param userUuid
     * @return
     */
    boolean isDefaultPassword(String userUuid);

    /**
     * 获取该用户的邀请人
     * @param userUuid
     * @return
     */
    UserEntity findInviterUser(String userUuid);

    /**
     * @param orderCouponCode
     * @return
     */
    UserEntity findByPromoCode(String orderCouponCode);
}
